const fs = require('fs');
const path = require('path');

module.exports = {
    // 注册 
    reg: function (username, password,email) {
        return new Promise(function (resolve, reject) {
            fs.readFile(path.join(__dirname, './users.json'), 'utf-8', function (error, data) {
                if (error) {
                    reject(error)
                } else {
                    let jsonData = data.toString();
                    jsonData = JSON.parse(jsonData);
                    jsonData.unshift({
                        userId: parseInt(Math.random() * 10000),
                        username: username,
                        password: password,
                        email:email,
                        regtime: new Date().toString(),
                    })
                    const str = JSON.stringify(jsonData, null, 5);
                    fs.writeFile(path.join(__dirname, './users.json'), str, function (err) {
                        if (err) {
                            resolve(false)
                        } else {
                            resolve(true)
                        }
                    })
                }
            })
        })
    },
    // 登录
    login: function (username, password) {
        return new Promise(function (resolve, reject) {
            fs.readFile(path.join(__dirname, './users.json'), function (error, data) {
                if (error) {
                    reject(error)
                } else {
                    resolve(JSON.parse(data).filter(item => {
                        if (item.username == username  && item.password == password) {  
                            return item
                        }
                    }))
                }
            })
        })
    },
    // 检测
    checked: function (username) {
        return new Promise(function (resolve, reject) {
            fs.readFile(path.join(__dirname + '/users.json'), 'utf-8', function (error, data) {
                if (error) {
                    reject(error)
                } else {
                    resolve(JSON.parse(data).some(item => item.username === username))
                }
            })
        })
    },
    // 查看
    read: function () {
        return new Promise(function (resolve, reject) {
            fs.readFile(path.join(__dirname, '/users.json'), function (error, data) {
                if (error) {
                    reject(error)
                } else {
                    resolve(JSON.parse(data))
                }
            })
        })
    },
    // 单个查询
    query: function (userId) {
        return new Promise(function (resolve, reject) {
            fs.readFile(path.join(__dirname, '/users.json'), function (error, data) {
                if (error) {
                    reject(error)
                } else {
                    resolve(data=JSON.parse(data).find(item => Number(item.userId) == userId))
                }
            })
        })
    },
    // 增加
    create: function (obj) {
        return new Promise(function (resolve, reject) {
            fs.readFile(path.join(__dirname, './users.json'), 'utf-8', function (error, data) {
                if (error) {
                    reject(error)
                } else {
                    let jsonData = data.toString();
                    jsonData = JSON.parse(jsonData);
                    jsonData.unshift({
                        userId: parseInt(Math.random() * 10000),
                        username: obj.username,
                        password: obj.password,
                        teamId:(parseInt(Math.random() * 10000)).toString(36),
                        teamName:obj.teamName,
                        teamMembers:obj.teamMembers,
                        email:obj.email,
                        regtime: new Date().toString(),
                    })
                    const str = JSON.stringify(jsonData, null, 1);
                    fs.writeFile(path.join(__dirname, './users.json'), str, function (err) {
                        if (err) {
                            reject(error)
                        } else {
                            resolve(JSON.parse(data))
                        }
                    })
                }
            })
        })
    },
    // 修改
    update: function (obj) {
        return new Promise(function (resolve, reject) {
            fs.readFile(path.join(__dirname, './users.json'), 'utf-8', function (error, data) {
                if (error) {
                    reject(error)
                } else {
                    let jsonData = data.toString();
                    jsonData = JSON.parse(jsonData);
                    jsonData.map(item=>{
                        if(String(item.userId )== String(obj.userId)){
                            for(const key in obj){
                                if(Object.prototype.hasOwnProperty.call(obj, key)){
                                    item[key] = obj[key]
                                }
                            }
                        } 
                        return item
                    })
                    const str = JSON.stringify(jsonData, null, 1)
                    fs.writeFile(path.join(__dirname, './users.json'), str, function (err) {
                        if (err) {
                            reject(error)
                        } else {
                            resolve(JSON.parse(data))
                        }
                    })
                }
            })
        })
    },
    // 删除
    delete: function (userId) {
        return new Promise(function (resolve, reject) {
            fs.readFile(path.join(__dirname, './users.json'), 'utf-8', function (error, data) {
                if (error) {
                    reject(error)
                } else {
                    let jsonData = data.toString();
                    jsonData = JSON.parse(jsonData);
                    // 单个删除
                    jsonData =  jsonData.filter(item => {
                        if(Number(item.userId) != userId){
                            return item
                        }})
                    const str = JSON.stringify(jsonData, null, 1);
                    fs.writeFile(path.join(__dirname, './users.json'), str, function (err) {
                        if (err) {
                            reject(error)
                        } else {
                            resolve(JSON.parse(data))
                        }
                    })
                }
            })
        })
    },
    // 批量删除
    remove: function (userIds) {
        return new Promise(function (resolve, reject) {
            fs.readFile(path.join(__dirname, './users.json'), 'utf-8', function (error, data) {
                if (error) {
                    reject(error)
                } else {
                    let jsonData = data.toString();
                    jsonData = JSON.parse(jsonData);
                    // 批量删除  
                    jsonData = jsonData.filter(item=>{
                        for(let i =0;i<userIds.length;i++){
                            return !userIds.includes(Number(item.userId))
                        }
                    })
                    const str = JSON.stringify(jsonData, null, 1);
                    fs.writeFile(path.join(__dirname, './users.json'), str, function (err) {
                        if (err) {
                            reject(error)
                        } else {
                            resolve(JSON.parse(data))
                        }
                    })
                }
            })
        })
    },
}